﻿#Requires AutoHotkey v2.0
;! 代表 alt, ^ 代表 ctrl, # 代表 win，+ 代表 shift
LAlt::LCtrl  ; 将左 Alt 键映射为左 Ctrl 键
; LControl::LWin  ; 将左 Ctrl 键映射为左 Win 键
; LControl:: return  ; 禁用 win 键
; LWin::LAlt ; 将右 Win 键映射为右 Alt 键

RAlt::RCtrl  ; 将右 Alt 键映射为右 Ctrl 键
; RControl::RWin  ; 将右 Ctrl 键映射为右 Win 键
; RControl:: return  ; 禁用 win 键
RWin::RAlt ; 将右 Win 键映射为右 Alt 键

$^Left:: SendInput "{Home}"
$^Right:: SendInput "{End}"
$^+Left:: SendInput "+{Home}" ; ctrl+shift+left 映射为 shift + home
$^+Right:: SendInput "+{End}"
;$+NumpadDiv::SendInput "+{VKBF}"
$+NumpadDiv:: SendInput "+{/}" ;键盘问号坏了， 从小键盘的映射过来

; command + w 关闭操作
$^w:: {
    if (WinActive("ahk_exe webstorm64.exe") || WinActive("ahk_exe clion64.exe") || WinActive("ahk_exe Code.exe") ||
    WinActive("ahk_exe chrome.exe") || WinActive("ahk_exe msedge.exe")) {
        SendInput "^w" ; 执行这些应用默认的 ctrl + w 行为
    } else if (WinActive("ahk_exe WindowsTerminal.exe")) {
        Send "^+{w}" ; WindowsTerminal 关闭当前 tab 不是 ctrl+w 而是 ctrl + shift + w
    } else {
        SendInput "!{F4}" ;ctrl+w 执行 alt+F4操作
    }

}

; 微信 command + s 发送消息
$^s:: {
    if (WinActive("ahk_exe WeChat.exe")) {
        Send "{Enter}"
    } else {
        Send "^{s}"
    }

}
$#a:: {
    ; 微信的截图设置为 ctrl+alt+numpaddiv 映射成 win+a
    SendInput "^!{NumpadDiv}"
}

$^e:: {
    ; 编辑器中 ctrl + e 是选中前面的字符， 除此之外其他地方让其打开资源管理器
    if (WinActive("ahk_exe webstorm64.exe") || WinActive("ahk_exe clion64.exe") || WinActive("ahk_exe Code.exe")) {
        SendInput "^e" ;
    } else {
        SendInput "#{e}"
    }

}

activeOrRun(str, app, path := "") {
    if (path) {
        Run app . " " . path
    } else {
        if (WinExist(str)) {
            if (WinActive(str)) {

            } else {
                WinActivate str
            }
        } else {
            ; 需要将 WindowsTerminal运行路径添加到环境变量 如： C:\Users\123456\AppData\Local\Microsoft\WindowsApps
            ; 默认在用户目录已经设置了:%USERPROFILE%\AppData\Local\Microsoft\WindowsApps
            Run app
        }
    }

}

$^NumpadEnter:: {
    IdeName := "webstorm64.exe"
    IdePath := "C:\Users\123456\AppData\Local\Programs\Microsoft VS Code\Code.exe"
    ; IdeName := "webstorm64.exe"
    ; IdePath := IdeName
    if (WinActive("ahk_exe explorer.exe")) {
        activeOrRun("ahk_exe IdeName", IdePath, A_WorkingDir)
    } else {
        activeOrRun("ahk_exe IdeName", IdePath)
    }

}

$^Up:: {
    if (WinActive("ahk_exe explorer.exe")) {
        Send "!{Up}"
    } else {
        Send "^{Up}"
    }

}

$^Numpad0:: {
    activeOrRun("ahk_exe chrome.exe", "chrome.exe")
}

$^NumpadDot:: {
    ; 需要将 WindowsTerminal运行路径添加到环境变量 如： C:\Users\123456\AppData\Local\Microsoft\WindowsApps
    ; 默认在用户目录已经设置了:%USERPROFILE%\AppData\Local\Microsoft\WindowsApps
    activeOrRun("ahk_exe WindowsTerminal.exe", "wt.exe", A_WorkingDir)
}

$^+z:: {
    ; ctrl + alt + z
    if (WinActive("ahk_exe Code.exe")) {
        SendInput "^+!u"
        SendInput "^+!z"
    } else {
        SendInput "^+z"
    }
}

$#Space:: {
    ; alt+` 激活剪切板历史， 新增 win + 空格也可以调出
    SendInput '!``'
}
$^BackSpace:: {
    if (WinActive("ahk_exe WindowsTerminal.exe")) {
        Send "{End}"
        Send "+{Home}"
        Send "{Delete}"
    } else if (WinActive("ahk_exe WeChat.exe")) {
        Send "+{Home}"
        Send "{Delete}"
    } else if (WinActive("ahk_exe explorer.exe")) {
        ; 在文件管理器按 ctrl + backspace 做删除动作， mac 就是这个行为
        Send "^{d}"
    }
    else {
        Send "^{BackSpace}"
    }

}
; 在终端里面删除光标以前的文字
$^u:: {
    if (WinActive("ahk_exe WindowsTerminal.exe")) {
        Send "+{Home}"
        Send "{Delete}"
    } else {
        Send "^{u}"
    }

}
; 资源管理器重命名的快捷键映射
$^r:: {
    if (WinActive("ahk_exe explorer.exe")) {
        Send "{F2}"
    } else {
        Send "^{r}"
    }
}

; 在 electron 开发者工具中执行清楚 console 动作
$^k:: {
    if (WinActive("ahk_exe electron.exe") || WinActive("ahk_exe chrome.exe") || WinActive("ahk_exe PHOENIX Plan.exe")) {
        Send "^{l}"
    } else {
        Send "^{k}"
    }
}
; ctrl + d 在 windows terminal 新开一个终端
$^d:: {
    if (WinActive("ahk_exe WindowsTerminal.exe")) {
        Send "^+{1}"
    } else {
        Send "^{d}"
    }
}
$#^Up:: {
    ;MsgBox "想要调起任务视图"
    Send "#{Tab}"
}
;终端 按 win+c 模拟成 mac 的 ctrl + c
$#c:: {
    if (WinActive("ahk_exe WindowsTerminal.exe")) {
        Send "^{c}"
        Send "^{c}"
    } else {
        Send "#{c}"
    }
}

; ctrl+q 退出应用
$^q:: {
    if (WinActive("ahk_exe webstorm64.exe")) {
        Send "^{q}"
    } else {
        Send "!{F4}"
    }
}

$F11:: {
    Send "#{d}"
}

;;;;;;;;;;;;;;;;;;;; 设置窗口组快捷键 start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$^Tab:: {
    Send "{Alt down}{tab}"
}
; 放开 Alt 不放开编辑器中 alt 一直处于按下状态， 必须手动放开
~!^::
~!+::
~!q::
~!w::
~!e::
~!r::
~!t::
~!y::
~!u::
~!i::
~!o::
~!p::
~!a::
~!s::
~!d::
~!f::
~!g::
~!j::
~!k::
~!l::
~!z::
~!x::
~!c::
~!v::
~!b::
~!n::
~!m::
~!LButton::
~!RButton::
~!Escape::
~!Esc::
~!Enter:: {
    Send "{Alt Up}"
}
